package com.example.demo1.util;


import com.example.demo1.constant.Constants;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.stereotype.Component;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;


@Component
public class JwtUtil {
	
    private static String profiles= Constants.profiles;
    
    public static long TOKEN_EXP_TIME_2H = 7200;      //token过期时间2小时   单位 秒
    public static long TOKEN_EXP_TIME_1M = 2592000;  	//token过期时间一个月   单位 秒
    
    /**
     * 加密token
     * @param userId
     * @param TOKEN_EXP_TIME 设置过期时间  --毫秒
     * @return
     * @throws Exception
     */
    public static String createToken(String userId,long TOKEN_EXP_TIME) throws Exception{
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("alg", "HS256");
        map.put("typ", "JWT");
        map.put("userId", userId);
        String compactJws = Jwts.builder()//返回的字符串便是我们的jwt串了
        		  .setSubject("token")//设置主题
        		  .setClaims(map)
        		  .setExpiration(new Date(System.currentTimeMillis() + TOKEN_EXP_TIME*1000))
        		  .signWith(SignatureAlgorithm.HS512, profiles)//设置算法（必须）
        		  .compact();//这个是全部设置完成后拼成jwt串的方法
        return compactJws;  
    } 
    
    
    /**
     * 解密token
     * @param token
     * @return
     * @throws Exception
     */
    public static Map<String,Object> dececodeToken(String token) throws Exception{
    	Claims claims = null;
    	try{
    		claims = Jwts.parser()
      		   .setSigningKey(profiles)
      		   .parseClaimsJws(token).getBody();
    	}catch(Exception e){
    		return null;
    	}
    	Map<String,Object> rs = new HashMap<>();
    	rs.put("userId", (String)claims.get("userId"));
    	rs.put("companyId", (String)claims.get("companyId"));
    	rs.put("oaAccount", (String)claims.get("oaAccount"));
    	rs.put("ExpDate", claims.getExpiration());
    	return rs;
    }

}
